function [Val,V]=Fun_V_Eval(PP,SS,UCoefp,State,Policy,Flag_SS)

%% Preliminary
% States
N_State     =   size(State,1);
x           =   State(:,1);
ID          =   State(:,2);
ret         =   State(:,3);
what        =   State(:,4);
z           =   PP.ExoState.IdioInc.Node(SS.FunApp.ExoState.State(ID,1));
% Policy
c           =   Policy;

%% Evaluation
% Flow
wN_SS       =   SS.wN;
[u,Exp,l]   =   UtilityFlow_Sep(PP.NU_C,PP.NU_L,SS.PSI,z.*what,c*wN_SS,'Consumption');
Exp         =   Exp/wN_SS;
b           =   x-Exp;
FC          =   -PP.KAPPA*min(b,0);
fp          =   (1+ret).*b-FC;
zl          =   z.*l;
% Continuation
BasMat      =   funbas(SS.FunApp.U.Space,fp);

if Flag_SS==1
    [rr,cc,vv]  =   find(BasMat);
    cc          =   cc+(ID(rr)-1)*SS.FunApp.U.Num;
    BasMat_U    =   sparse(rr,cc,vv,N_State,SS.FunApp.U.Num*SS.FunApp.ExoState.N);
    Val         =   BasMat_U*UCoefp;
else
    UCoefp_Mat  =   reshape(UCoefp,SS.FunApp.U.MatSize_State);
    Val         =   zeros(N_State,1);
    for ii_ID=1:SS.FunApp.ExoState.N
        TempInd         =   ID==ii_ID;
        Val(TempInd)    =   BasMat(TempInd,:)*UCoefp_Mat(:,ii_ID);
    end
end

% Value
Val         =   u + SS.BETA*Val;
V           =   struct('Val',Val,...
                       'Policy',struct('c',c,'l',l,'b',b,'FC',FC, ...
                                       'fp',fp,'zl',zl));
if Flag_SS==1
    V.FlowVec   =   u;
    V.CoefMat   =   SS.BETA*BasMat_U;
end